<?php
// Ecrit le 4/1/2014 par Yves ZENELS

include_once ('Parametres.php');

// Ce service web peut être appelé par l'utilisateur qui a oublié son mot de passe
// il envoie un mail à l'utilisateur contenant le mot de passe et le digicode
// et fournit un flux XML contenant un compte-rendu d'exécution

// Le mail n'est envoyé que si l'URL contient le login d'un utilisateur enregistré :
//     http://sio2-projetdigicode.site50.net/MdpOublie.php?login=admin
// Il fournit un message d'erreur dans les autres cas

// déclaration des variables globales pour pouvoir les utiliser aussi dans les fonctions
global $doc;		// le document XML à générer
global $cnx;		// la connexion à la base
global $jdd;		// le jeu de données obtenu
global $ligneMail;	// les données de l'utilisateur

// crée une instance de DOMdocument 
$doc = new DOMDocument();

// specifie la version et le type d'encodage
$doc->version = '1.0';
$doc->encoding = 'ISO-8859-1';
  
// crée un commentaire et l'encode en ISO
$elt_commentaire = $doc->createComment('Créé par JM CARTRON - Lycée De La Salle - Rennes');
// place ce commentaire à la racine du document XML
$doc->appendChild($elt_commentaire);
	
// Récupération des données passées dans l'URL 
// (la fonction $_GET récupère une donnée passée en paramètre dans l'URL)
if ( empty ($_GET ["login"]) == true)  $login = "";  else   $login = $_GET ["login"];

// Contrôle de la présence des paramètres dans l'URL
if ( $login == "")
{	TraitementAnormal ("Les paramètres passés dans l'URL sont incorrects !");
}
else
{	// connexion du serveur web à la base MySQL à l'aide d'un fichier externe à inclure
	include ('Connexion.php');		// "include" peut être remplacé par "require"

	// préparation de la requête de recherche de l'utilisateur
	$req = "Select * from utilisateurs where Ulogin = '" . $login . "'";
	//echo  $req;		// on peut afficher le texte de la requête en mise au point, et le masquer ensuite !
	
	// extraction des données et comptage des réponses
	$jdd = mysql_query ($req , $cnx)  or  die ( $req . '<br>' . mysql_error() );
	$nbReponses = mysql_num_rows ($jdd);
	$ligneMail = mysql_fetch_assoc ($jdd);
	
	if ($nbReponses == 0) 
		TraitementAnormal("L'utilisateur n'est pas enregistré dans la base de données !");
	else if ($ligneMail['Umail'] == NULL)
		TraitementAnormal("Votre adresse mail n'a pas été renseignée !");
	else 
		TraitementNormal();
		
	// ferme la connexion à MySQL :
	mysql_close ($cnx);
}
// Mise en forme finale   
$doc->formatOutput = true;  
// renvoie le contenu XML
echo $doc->saveXML();
// fin du programme
exit;


// fonction de traitement des cas anormaux
function TraitementAnormal($msg)
{	// redéclaration des données globales utilisées dans la fonction
	global $doc;
	// crée l'élément 'data' à la racine du document XML
	$elt_data = $doc->createElement('data');
	$doc->appendChild($elt_data);
	// place l'élément 'reponse' juste après l'élément 'data'
	$elt_reponse = $doc->createElement('reponse', $msg);
	$elt_data->appendChild($elt_reponse); 
	return;
}
 

// fonction de traitement des cas normaux
function TraitementNormal()
{	// redéclaration des données globales utilisées dans la fonction
	global $doc, $cnx, $jdd, $ligneMail;

	$req = "Select digicode from parametres";
	$jdd = mysql_query ($req , $cnx)  or  die ( $req . '<br>' . mysql_error() );
	$ligneDigicode = mysql_fetch_assoc($jdd);

	// libère les ressources du jeu de données :
	mysql_free_result ($jdd);
	
	$sujet = 'Mot de passe de l\'application digicode';
	$msg = "Votre mot de passe : " . $ligneMail['UmotDePasse'] . "\r\n";
	$msg = $msg . "Le digicode : " . $ligneDigicode['digicode'];
	
	$destinataire = $ligneMail["Umail"];
	// utilisation d'une expression régulière pour vérifier si c'est une adresse Gmail :
	if ( preg_match ( "#^.+@gmail\.com$#" , $destinataire) == true)
	{	// on commence par enlever les points dans l'adresse gmail car ils ne sont pas pris en compte
		$destinataire = str_replace(".", "", $destinataire);
		// puis on remet le point de "@gmail.com"
		$destinataire = str_replace("@gmailcom", "@gmail.com", $destinataire);
	}
	// envoi du mail avec la fonction mail de PHP
	$ok = mail($destinataire , $sujet , $msg, "From:" . $adrExpediteur);
	
	// place l'élément 'data' à la racine du document XML (juste après le commentaire)
	$elt_data = $doc->createElement('data');
	$doc->appendChild($elt_data);

	if ($ok)
		$msg = 'Mail envoyé à ' . $destinataire;
	else
		$msg = "Echec lors de l'envoi du mail !";
		
	// place l'élément 'reponse' juste après l'élément 'data'
	$elt_reponse = $doc->createElement('reponse', $msg);
	$elt_data->appendChild($elt_reponse); 
	return;
}
?>
